/**
 * 
 */
package controller.os;

import java.util.Collection;
import java.util.Date;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import model.OrdemServico;
import model.Tecnico;
import controller.util.UtilTela;
import dao.OrdemServicoDAOLocal;
import enumtype.StatusOrdemServico;

/**
 * @author Mauricio Sennos
 */

public class AlteraExibeOSController {
	@EJB
	private OrdemServicoDAOLocal osDao;
	
	private String nome;
	private String logradouro;
	private String bairro;
	private String tel;
	private Date dataAbertura;
	private String situacao;
	private String tecnico;
	private String regiao;
	private SelectItem[] selItemServico = {
			new SelectItem('T', "Instalacao de Telefone"),
			new SelectItem('B', "Instalacao de banda larga"),
			new SelectItem('C', "Instalacao de TV a cabo") };
	private String descrProblema;
	private String descrServico;
	public String getDescrServico() {
		return descrServico;
	}



	private Character tipoServicoSel;
	private boolean edita;
	private Integer id;
	
	//Para uso com html select
	private SelectItem[] selSituacao = new SelectItem[4];
	private byte situacaoSel;
	
	public String getBairro() {
		return bairro;
	}
	
	

	public Date getDataAbertura() {
		return dataAbertura;
	}

	public String getDescrProblema() {
		return descrProblema;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public String getNome() {
		return nome;
	}

	public SelectItem[] getSelItemServico() {
		return selItemServico;
	}

	public String getTel() {
		return tel;
	}

	public Character getTipoServicoSel() {
		return tipoServicoSel;
	}

	public boolean isEdita() {
		return edita;
	}

	public void mostraDetalhe (ActionEvent ae) {
		String cmd = (String)ae.getComponent().getAttributes().get("cmd");
		if (cmd.equals("exibir")) {
			this.edita = false;
		}
		else if (cmd.equals("editar")) {
			this.edita = true;
		}
		OrdemServico osSelecionada = (OrdemServico)UtilTela.getRequest().getAttribute("item");
		this.dataAbertura = osSelecionada.getDataAbertura();
		this.nome = osSelecionada.getCliente().getNome();
		this.tel = osSelecionada.getCliente().getTelefone();
		this.tipoServicoSel = osSelecionada.getTipoServico();
		this.descrProblema = osSelecionada.getDescricaoProblema();
		this.situacao = osSelecionada.getStatus().getDescricao();
		this.situacaoSel = osSelecionada.getStatus().getCodigo();
		this.id = osSelecionada.getId();
		this.descrServico = osSelecionada.getDescricaoServico();
		//Trata captura do nome do técnico e região
		Collection<Tecnico> tecnicos =  osSelecionada.getColTecnico();
		if (tecnicos != null && !tecnicos.isEmpty()) {
			Tecnico tec1 = tecnicos.iterator().next();
			this.tecnico = tec1.getNome();
			/* Collection<Regiao> regioes =  tec1.getColRegiao();
			if (regioes != null && !regioes.isEmpty()) {
				Regiao reg = regioes.iterator().next();
				this.regiao = reg.getNome();
			} */
		}
		
		
	}
	
	public void grava(ActionEvent ae) {
		osDao.atualiza(id, tipoServicoSel, descrProblema, StatusOrdemServico.fromCode(situacaoSel));
		UtilTela.mostraMensagem(null, "Dados alterados com sucesso", FacesMessage.SEVERITY_INFO);
		OrdemServicoController osController =  (OrdemServicoController) UtilTela.getSessionAttribute("ordemServicoController");
		osController.pesquisa(ae);
	}
	
	public AlteraExibeOSController() {
		//Monta o select com os estados possiveis
		StatusOrdemServico [] arrayStatus=  StatusOrdemServico.values();
		 this.selSituacao = new SelectItem [arrayStatus.length];
		for (int i=0; i< arrayStatus.length; i++) {
			selSituacao[i] = new SelectItem();
			selSituacao[i].setValue(arrayStatus[i].getCodigo());
			selSituacao[i].setLabel(arrayStatus[i].getDescricao());
		}
	}
	
	public void capturaUltimaSituacaoSel(ValueChangeEvent vce) {
		if (vce.getNewValue() != null && vce.getNewValue().toString().trim() != "") {
			this.situacaoSel = (Byte)vce.getNewValue();
		}
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public void setDescrProblema(String descrProblema) {
		this.descrProblema = descrProblema;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}

	public void setTipoServicoSel(Character tipoServicoSel) {
		this.tipoServicoSel = tipoServicoSel;
	}



	public SelectItem[] getSelSituacao() {
		return selSituacao;
	}



	public byte getSituacaoSel() {
		return situacaoSel;
	}



	public void setSituacaoSel(byte situacaoSel) {
		this.situacaoSel = situacaoSel;
	}



	public String getSituacao() {
		return situacao;
	}
	
	public String getDescTipoServico() {
		for (SelectItem selectItem : selItemServico) {
			if (selectItem.getValue().equals(tipoServicoSel)) {
				return selectItem.getLabel();
			}
		}
		return null;
	}



	public String getTecnico() {
		return tecnico;
	}



	public String getRegiao() {
		return regiao;
	}
}
